home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / tools / developer-tools / c-tools / c_examples / audiodt / audiodt.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-16  |  4.3 KB  |  160 lines

  1. //////////////////////////////////////////////////////////////////////////////
  2. // AudioDT.cpp
  3. //
  4. // Deryk Robosson
  5. // March 16, 1996
  6. //////////////////////////////////////////////////////////////////////////////
  7.  
  8. //////////////////////////////////////////////////////////////////////////////
  9. // INCLUDES
  10. #include "aframe:include/AudioDT.hpp"
  11.  
  12. //////////////////////////////////////////////////////////////////////////////
  13. //
  14.  
  15. AFAudioDT::AFAudioDT()
  16. {
  17.     m_dtAudio.volume=64;
  18.     m_dtAudio.cycles=1;
  19.     m_dtAudio.period=330;   // Defaults
  20. }
  21.  
  22. AFAudioDT::~AFAudioDT()
  23. {
  24. }
  25.  
  26. // Create new object from file
  27. BOOL AFAudioDT::LoadSample(char *file_name)
  28. {
  29.     if(m_dtGlobal.o != NULL) {
  30.         if(m_dtGlobal.dtAdded)
  31.             RemoveObject();
  32.         DisposeDTObject(m_dtGlobal.o);
  33.         delete m_dtGlobal.o;
  34.         m_dtGlobal.o=NULL;
  35.     }
  36.  
  37.     if(!(IsDataType(file_name)))
  38.         return FALSE;
  39.  
  40.     if(!(m_dtGlobal.o=NewDTObject(file_name,DTA_SourceType,DTST_FILE,
  41.                                   DTA_GroupID,GID_SOUND,
  42.                                   GA_Immediate, TRUE,
  43.                                   GA_RelVerify, TRUE,
  44.                                   SDTA_Continuous, TRUE,
  45.                                   SDTA_Volume,m_dtAudio.volume,
  46.                                   SDTA_Cycles,m_dtAudio.cycles,
  47.                                   ICA_TARGET, ICTARGET_IDCMP,
  48.                                   TAG_DONE)))
  49.             return FALSE;
  50.     else return TRUE;
  51. }
  52.  
  53. // Play the existing object
  54. BOOL AFAudioDT::PlaySample()
  55. {
  56.     if(m_dtGlobal.o != NULL) {
  57.         m_dtAudio.dtt.MethodID = DTM_TRIGGER;
  58.         m_dtAudio.dtt.dtt_Function = STM_PLAY;
  59.         DoMethodA(m_dtGlobal.o,(Msg)&m_dtAudio.dtt);
  60.         return TRUE;
  61.     } else return FALSE;
  62. }
  63.  
  64. // Play from a file
  65. BOOL AFAudioDT::PlayFile(char *file_name)
  66. {
  67.     Object *tempo;
  68.     AUDIODT save;
  69.  
  70.     save=m_dtAudio;
  71.  
  72.     if(!(IsDataType(file_name)))
  73.         return FALSE;
  74.  
  75.     if(tempo=NewDTObject(file_name,DTA_SourceType,DTST_FILE,
  76.                          DTA_GroupID,GID_SOUND,
  77.                          SDTA_Volume,m_dtAudio.volume,
  78.                          SDTA_Cycles,m_dtAudio.cycles,
  79.                          ICA_TARGET, ICTARGET_IDCMP,
  80.                          TAG_DONE)) {
  81.  
  82.             m_dtAudio.dtt.MethodID = DTM_TRIGGER;
  83.             m_dtAudio.dtt.dtt_Function = STM_PLAY;
  84.             if(!(DoMethodA(tempo,(Msg)&m_dtAudio.dtt))) {
  85.                 DisposeObject(tempo);
  86.                 tempo = NULL;
  87.                 return FALSE;
  88.             }
  89.     } else return FALSE;
  90.     DisposeDTObject(tempo);
  91.     tempo=NULL;
  92.     m_dtAudio=save;
  93.     return TRUE;
  94. }
  95.  
  96. // Set volume of current object
  97. BOOL AFAudioDT::SetVolume(int volume)
  98. {
  99.     return SetVolume((ULONG)volume);
  100. }
  101.  
  102. // Set volume of current object
  103. BOOL AFAudioDT::SetVolume(ULONG volume)
  104. {
  105.     if(m_dtGlobal.o != NULL) {
  106.         if(SetDTAttrs(m_dtGlobal.o,m_dtGlobal.dtWindow->m_pWindow,(struct Requester*)NULL,SDTA_Volume,
  107.                         volume,TAG_DONE)) {
  108.             m_dtAudio.volume = volume;
  109.             m_dtAudio.vhdr->vh_Volume=volume;
  110.             return TRUE;
  111.         } else return FALSE;
  112.     } else return FALSE;
  113. }
  114.  
  115. // Set buffer of current object
  116. BOOL AFAudioDT::SetBuffer(UBYTE* buffer, ULONG size)
  117. {
  118.     if(m_dtGlobal.o != NULL) {
  119.         if(SetDTAttrs(m_dtGlobal.o,m_dtGlobal.dtWindow->m_pWindow,(struct Requester*)NULL,
  120.                     SDTA_Sample,&buffer,SDTA_SampleLength,size,TAG_DONE)) {
  121.             m_dtAudio.buffer = (char*)buffer;
  122.             m_dtAudio.samplelength = size;
  123.             return TRUE;
  124.         } else return FALSE;
  125.     } else return FALSE;
  126. }
  127.  
  128. // Set task to signal when another
  129. // buffer is needed or play is done
  130. BOOL AFAudioDT::SignalTask(struct Task *task)
  131. {
  132.     if(m_dtGlobal.o != NULL) {
  133.         if(SetDTAttrs(m_dtGlobal.o,m_dtGlobal.dtWindow->m_pWindow,(struct Requester*)NULL,SDTA_SignalTask,
  134.                         task,TAG_DONE))
  135.             return TRUE;
  136.         else return FALSE;
  137.     } else return FALSE;
  138. }
  139.  
  140. // Get buffer and return to user
  141. UBYTE* AFAudioDT::GetBuffer(UBYTE* buffer)
  142. {
  143.     if(m_dtGlobal.o != NULL) {
  144.         if(!(GetDTAttrs(m_dtGlobal.o,SDTA_Sample,&buffer,TAG_DONE))) {
  145.             buffer = NULL;
  146.             return buffer;
  147.         }
  148.         else return buffer;
  149.     } else {
  150.         buffer = NULL;
  151.         return buffer;
  152.       }
  153. }
  154.  
  155. // Get buffersize and return to user
  156. ULONG AFAudioDT::GetBufferSize()
  157. {
  158.     return m_dtAudio.samplelength;
  159. }
  160.